package com.centerm.structure.api;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.centerm.common.constant.Constant;
import com.centerm.common.constant.error.GlobalErrorEnum;
import com.centerm.common.constant.validate.Delete;
import com.centerm.common.constant.validate.Insert;
import com.centerm.common.constant.validate.Update;
import com.centerm.common.view.JSONResponse;
import com.centerm.common.view.page.DefaultPage;
import com.centerm.common.view.page.PageQueryParam;
import com.centerm.common.view.page.PageQueryResult;
import com.centerm.structure.dto.PermissionInfo;
import com.centerm.structure.dto.PermissionTreeInfo;
import com.centerm.structure.service.PermissionService;

@RestController
@RequestMapping("permission")
public class PermissionAPI extends AbstractAPI {
    
    @Autowired
    private PermissionService permissionService;
    
    /**
     * 根据条件分页查询权限列表
     * @author czy
	 * @date 2017年8月14日
     * @param 
     * @return 
     */
    @PostMapping("page/byParam")
    public JSONResponse<PageQueryResult<PermissionInfo>> pagePermissionByParam(
            @RequestBody PageQueryParam<PermissionInfo> param) {
        DefaultPage page = param.getPage();
        PermissionInfo permissionInfo = param.getParam();
        if(page == null || permissionInfo == null) {
            // 参数检查异常
            logger.debug("PARAM_ERROR：" + param.toString());
            return new JSONResponse<>(GlobalErrorEnum.PARAM_ERROR);
        }
        // 分页查询
        PageQueryResult<PermissionInfo> queryResult = permissionService.pagePermissionInfoList(
                page.getPageNum() == null ? Constant.DEFAULT_PAGENUM : page.getPageNum(), 
                        page.getPageSize() == null ? Constant.DEFAULT_PAGESIZE : page.getPageSize(),
                        		permissionInfo);
        return success(queryResult);
    }
    
    /**
     * 新增权限信息
     * @author czy
	 * @date 2017年8月11日
     * @param PermissionInfo:权限信息
     * @return 权限id
     */
    @PostMapping("insert")
    public JSONResponse<Integer> insert(@RequestBody @Validated(Insert.class) PermissionInfo permissionInfo) {
        Integer result = permissionService.insert(permissionInfo);
        if (result == null||result < 1) {
			logger.error("新增权限异常：" + GlobalErrorEnum.UNKNOWN_ERROR.getMsg());
			return new JSONResponse<>(GlobalErrorEnum.UNKNOWN_ERROR);
		} else {
			return success(result);
		}
    }
    
	/**
	* @Description: 
	* 	更新权限信息
	* @author czy
	* @date 2017年8月11日
	* @param PermissionInfo 权限信息
	* @return JSONResponse<Integer>
	 */
	@PostMapping("update")
	public JSONResponse<Integer> update(@RequestBody @Validated(Update.class) PermissionInfo permissionRequest) {
		Integer result = permissionService.update(permissionRequest);
		if (result != 1) {
			logger.error("更新权限异常：" + GlobalErrorEnum.UNKNOWN_ERROR.getMsg());
			return new JSONResponse<>(GlobalErrorEnum.UNKNOWN_ERROR);
		} else {
			return success(result);
		}
	}
	
	/**
	* @Description: 
	* 	物理删除权限
	* @author czy
	* @date 2017年7月26日
	* @param id 权限id
	* @return JSONResponse<Integer>
	 */
	@PostMapping("delete/physic")
	public JSONResponse<Integer> deletePhysic(@RequestBody @Validated(Delete.class) PermissionInfo permissionRequest) {
		Integer result = permissionService.delete(permissionRequest.getId());
		if (result != 1) {
			logger.error("物理删除权限异常：" + GlobalErrorEnum.UNKNOWN_ERROR.getMsg());
			return new JSONResponse<>(GlobalErrorEnum.UNKNOWN_ERROR);
		} else {
			return success(result);
		}
	}
	
	/**
	* @Description: 
	* 	逻辑删除权限
	* @author czy
	* @date 2017年7月26日
	* @param id 权限id
	* @return JSONResponse<Integer>
	 */
	@PostMapping("delete/logic")
	public JSONResponse<Integer> deleteLogic(@RequestBody @Validated(Delete.class) PermissionInfo permissionRequest) {
		permissionRequest.setValid(0);
		Integer result = permissionService.update(permissionRequest);
		if (result != 1) {
			logger.error("逻辑删除权限异常：" + GlobalErrorEnum.UNKNOWN_ERROR.getMsg());
			return new JSONResponse<>(GlobalErrorEnum.UNKNOWN_ERROR);
		} else {
			return success(result);
		}
	}
	
	/**
	 * @Description: 
	 *   根据id获取权限详细信息
	 * @author czy
	 * @date 2017年8月11日
	 * @param id 权限id
	 * @return PermissionInfo
	 */
	@PostMapping("getById")
	public JSONResponse<PermissionInfo> getById(@RequestBody PermissionInfo permissionInfo) {
		Integer permissionId = permissionInfo.getId();
		if (permissionId == null) {
			logger.error("获取权限详细信息异常：" + GlobalErrorEnum.PARAM_ERROR.getMsg());
			return new JSONResponse<>(GlobalErrorEnum.PARAM_ERROR);
		}
		permissionInfo = permissionService.getById(permissionId);
		if (permissionInfo == null) {
			logger.error("获取权限详细信息异常：" + GlobalErrorEnum.UNKNOWN_ERROR.getMsg());
			return new JSONResponse<>(GlobalErrorEnum.UNKNOWN_ERROR);
		} else {
			return success(permissionInfo);
		}
	}
	
    /**
     * 验证权限编码是否存在
     * @author czy
	 * @date 2017年8月14日
     * @param 
     * @return 
     */
    @RequestMapping("existCode")
	public JSONResponse<Integer> existCode(@RequestBody PermissionInfo permissionInfo){
    	String code = permissionInfo.getCode();
    	if(StringUtils.isBlank(code)){
    		// 参数检查异常
            return new JSONResponse<>(GlobalErrorEnum.PARAM_ERROR);
    	}
    	Boolean b = permissionService.existCode(code);
		return success(b?1:0);
	}  
	
	/**
	 * @Description: 
	 *   获得所有子层权限---树结构形式
	 * @author czy
	 * @date 2017年8月15日
	 * @param id:权限id,0为顶层节点
	 * @return 
	 */
	@PostMapping("loadPermissionTree")
	public JSONResponse<List<PermissionTreeInfo>> loadPermissionTree(@RequestBody PermissionInfo permissionInfo) {
		Integer parentId = permissionInfo.getParentId();
		parentId = parentId==null?0:parentId;
		List<PermissionTreeInfo> permissionTreeInfoList = permissionService.loadPermissionTree(parentId);
		if (permissionTreeInfoList == null) {
			logger.error("获取权限树结构异常：" + GlobalErrorEnum.UNKNOWN_ERROR.getMsg());
			return new JSONResponse<>(GlobalErrorEnum.UNKNOWN_ERROR);
		} else {
			return success(permissionTreeInfoList);
		}
	}
	
	/**
	 * @Description: 
	 *   获得当前父节点的下层权限
	 * @author czy
	 * @date 2017年8月15日
	 * @param id:权限id,0为顶层节点
	 * @return 
	 */
	@PostMapping("loadCurrentPermissionTree")
	public JSONResponse<List<PermissionTreeInfo>> loadCurrentPermissionTree(@RequestBody PermissionInfo permissionInfo) {
		Integer parentId = permissionInfo.getId();
		parentId = parentId==null?0:parentId;
		List<PermissionTreeInfo> permissionTreeInfoList = permissionService.loadCurrentPermissionTree(parentId);
		if (permissionTreeInfoList == null) {
			logger.error("获取子层权限异常：" + GlobalErrorEnum.UNKNOWN_ERROR.getMsg());
			return new JSONResponse<>(GlobalErrorEnum.UNKNOWN_ERROR);
		} else {
			return success(permissionTreeInfoList);
		}
	}
}
